Sophisticated graphics packages have been used for some time in expensive computer design and graphics systems. Increased capabilities of graphics controllers and display systems, combined with standardized graphics languages, have made complex graphics functions available in even the most routine applications. For example, word processor, spread sheets and desktop publishing packages now include relatively sophisticated graphics capabilities. Three-dimensional (3D) displays have become common in games, animation, and multimedia communication and drawing packages.
The availability of sophisticated graphics in PCs has driven a demand for even greater graphics capabilities. To obtain these capabilities, graphics systems must be capable of performing more sophisticated functions in less time to process greater amounts of graphical data required by modern software applications. In particular, there is a continuing need for improvements in software algorithms and hardware implementations to draw three-dimensional objects using full color, texture mapping and transparency blending.
Improvements have been made in the hardware realm. Graphics processors and accelerators are available with software drivers that provide an interface between a host central processing unit and graphics processors. In general, the graphics software receives information for drawing objects on a computer screen, calculates certain basic parameters associated with the objects and provides input to the graphics processor in the form of a "display list" of parameters.
A graphics processor then uses the display list values in generating the graphics objects to be displayed. The graphics processor may use interpolation techniques where the fundamental information for the object to be drawn comprises a series of initial and incremental parameters or values. The graphics processor loads or otherwise receives the initial parameters for the pixels to be drawn, and interpolates to draw the object by incrementing the parameters until the object is completely drawn.
Existing graphics implementations that use display lists typically load data in a sequential format to a register file in the graphics processor. For each type of primitive, a particular set of data values is required to render that type of primitive. For example, a point to be drawn to a pixel grid may require an "x,y" location, color value, and a "z" or depth value for depth comparison. Conversely, if the primitive is a line, the parameters required may also include a slope to describe the line's direction in the x direction, and a count value to define the length in the y direction.
An example of a display list is shown below in Table 1:
TABLE 1 ______________________________________ ADDRESS NAME DESCRIPTION ______________________________________ 0X4000 X Initial X value 0X4004 Y Initial Y value 0X4008 R Initial Red value 0X400C G Initial Green value 0X4014 B Initial Blue value 0X4044 Z Initial depth value ______________________________________
The display list provides the parameters required to draw points, lines, and polygons. The display list provided from the central processor or from memory provides data for the various registers in the register file. The display parameter values are processed by the graphics processor to render the corresponding graphics objects.
For example, a typical polygon may be divided into two separate adjacent triangles. A "main slope" technique requires the calculation of a "main slope" which is defined as the slope of the side that extends the entire vertical length of polygon. Two "opposite slopes" are determined which represent the slopes of the other two sides of the polygon. The slopes and dimensions of the polygon components are used in the creation of graphics images on display units.
In addition to the basic position and color parameters of a polygon, the graphics processor renders other parameters, such as texture parameters, as part of the polygon. These parameters are provided to the graphics processor in a display list generated by the central processing unit (CPU). The graphics processor executes the display list and renders the appropriate pixels for the polygon.
The rendering or interpolation of the graphics primitive is very process-intensive and requires the graphics processor to control the computer system bus or a dedicated communication link with the CPU. However, since prior art graphics processors do not have system bus-mastering capabilities, these graphics processors have to depend on the CPU to handle a bulk of the processing of graphics data in the computer system. Relying on the CPU to process most of the graphics data means that the graphics processor has to compete with other system resources for the CPU's bus bandwidth. This process can be time consuming and may lead to the loss of graphics data between the time such data are processed until the data are displayed on a display screen. The CPU dependence may also affect the overall system performance if there are many graphics applications running concurrently within the system.
It would be advantageous, therefore, if a graphics system were developed which could allow the graphics processor to have bus-mastership of the system bus in a computer system during a write operation of graphics primitive parameters and during renderings of graphics primitives.
It would be further advantageous if the host processor could transmit parameter values as part of the display list which would be internally stored in the graphics processor for subsequent writes to the register file in the graphics processor while the graphics processor is processing other instructions, and without incurring any extra write or clock cycles.
Thus, there is a need for a method of reducing the memory bandwidth of the graphics processor while rendering graphics primitives such as polygons within the graphics subsystem while maintaining the processing speed of CPU.